package com.hardydou.common.result;

import cn.hutool.core.lang.Assert;
import cn.hutool.http.HttpStatus;

/**
 * 响应码<br/>
 * Code规则:<br/>
 * 1、0成功、1失败<br/>
 * 2、保留 Http状态码<br/>
 * 3、业务模块状态码用4位，前2位代表行为：系统模块等、后2位累加<br/>
 *
 * @author hardy
 */
public enum Code {
    /**
     * 系统码 0-999
     */
    SUCCESS(0, "成功"),
    FAILURE(1, "失败"),

    /***
     * 部门 10xx
     */
    DEPT(1000, "部门码"),
    DEPT_DEL_HAS_DEPT(1001, "请先移除部门内子部门"),
    DEPT_DEL_HAS_USER(1002, "请先移除部门内用户"),
    DEPT_DEL_ERROR(1003, "部门删除失败"),

    /***
     * 系统角色
     */
    ROLE(1100, "角色码"),

    /***
     * 岗位
     */
    JOB(1200, "岗位码"),

    /***
     * 系统用户
     */
    USER(1300, "系统用户码"),
    USER_OFF_LINE(1301, "用户不在线"),

    /***
     * 文件上传
     */
    UPLOAD_NO_SUPPORT_FORMAT(1401, "不支持格式"),

    /***
     * 系统任务
     */
    TASK(1500, "系统任务码"),
    TASK_NO_EXIST(1501, "任务不存在"),
    TASK_IS_EXIST(1502, "任务已经存在"),
    TASK_IS_STOP(1503, "任务已经停止"),
    TASK_IS_START(1504, "任务已经开始"),

    /**
     * HTTP Code
     */
    HTTP_NOT_FOUND(HttpStatus.HTTP_NOT_FOUND, "未找到资源"),
    HTTP_INTERNAL_ERROR(HttpStatus.HTTP_INTERNAL_ERROR, "系统错误"),
    HTTP_UNAUTHORIZED(HttpStatus.HTTP_UNAUTHORIZED, "请先登录"),
    HTTP_FORBIDDEN(HttpStatus.HTTP_FORBIDDEN, "无权限");

    /***
     * 状态码，客户端可以针对性做一些处理
     */
    private int code;

    /**
     * 状态码描述
     */
    private String tip;

    /***
     * 建议调用者，是否需要再次发起调用
     */
    private boolean retry;


    Code(int code, String tip) {
        this.code = code;
        this.retry = false;
        this.tip = tip;
    }

    Code(int code, boolean retry, String tip) {
        this.code = code;
        this.retry = retry;
        this.tip = tip;
    }

    public int getCode() {
        return code;
    }

    public String getTip() {
        return tip;
    }

    public boolean isRetry() {
        return retry;
    }
}
